//! Yaya安全服务层主程序
//! 
//! 提供安全服务层的命令行接口和示例用法

use yaya_safe_services::prelude::*;
use log::{info, error};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 初始化日志
    env_logger::init();
    
    info!("Yaya安全服务层启动");
    
    // 创建服务管理器
    let service_manager = ServiceManager::new()?;
    
    // 启动所有服务
    service_manager.start_all_services()?;
    
    // 演示服务使用
    demo_services(&service_manager)?;
    
    info!("Yaya安全服务层运行完成");
    Ok(())
}

fn demo_services(service_manager: &ServiceManager) -> Result<(), Box<dyn std::error::Error>> {
    info!("开始演示服务功能");
    
    // 演示内存服务
    let mem_service = service_manager.get_memory_service();
    let mut mem_guard = mem_service.lock().map_err(|e| format!("无法锁定内存服务: {}", e))?;
    
    // 分配内存
    let ptr = mem_guard.allocate(1024)?;
    info!("分配内存成功: 地址={}", ptr);
    
    // 写入内存
    let data = vec![1, 2, 3, 4, 5];
    mem_guard.write_memory(ptr, &data)?;
    info!("写入内存成功: 地址={}, 数据大小={}", ptr, data.len());
    
    // 读取内存
    let read_data = mem_guard.read_memory(ptr, data.len())?;
    info!("读取内存成功: 地址={}, 数据大小={}", ptr, read_data.len());
    
    // 释放内存
    mem_guard.free(ptr)?;
    info!("释放内存成功: 地址={}", ptr);
    
    drop(mem_guard);
    
    // 演示进程服务
    let proc_service = service_manager.get_process_service();
    let mut proc_guard = proc_service.lock().map_err(|e| format!("无法锁定进程服务: {}", e))?;
    
    // 创建进程
    let pid = proc_guard.create_process("demo_process", "echo 'Hello World'", 4096)?;
    info!("创建进程成功: PID={}", pid);
    
    // 获取进程信息
    let process_info = proc_guard.get_process_info(pid)?;
    info!("进程信息: PID={}, 名称={}, 状态={:?}", 
          process_info.pid, process_info.name, process_info.state);
    
    // 列出所有进程
    let processes = proc_guard.list_processes();
    info!("当前进程数量: {}", processes.len());
    
    // 终止进程
    proc_guard.terminate_process(pid)?;
    info!("终止进程成功: PID={}", pid);
    
    drop(proc_guard);
    
    // 演示文件系统服务
    let fs_service = service_manager.get_filesystem_service();
    let mut fs_guard = fs_service.lock().map_err(|e| format!("无法锁定文件系统服务: {}", e))?;
    
    // 创建目录
    fs_guard.create_directory("/home/user/documents")?;
    info!("创建目录成功: /home/user/documents");
    
    // 创建文件
    fs_guard.create_file("/home/user/documents/test.txt")?;
    info!("创建文件成功: /home/user/documents/test.txt");
    
    // 写入文件
    let file_content = b"Hello, Yaya Safe Services!";
    fs_guard.write_file("/home/user/documents/test.txt", file_content)?;
    info!("写入文件成功: /home/user/documents/test.txt, 大小={}", file_content.len());
    
    // 读取文件
    let read_content = fs_guard.read_file("/home/user/documents/test.txt")?;
    info!("读取文件成功: /home/user/documents/test.txt, 大小={}", read_content.len());
    
    // 列出目录
    let dir_contents = fs_guard.list_directory("/home/user/documents")?;
    info!("目录内容: 包含 {} 个项目", dir_contents.len());
    
    drop(fs_guard);
    
    // 演示网络服务
    let net_service = service_manager.get_network_service();
    let mut net_guard = net_service.lock().map_err(|e| format!("无法锁定网络服务: {}", e))?;
    
    // 启动网络服务
    net_guard.start()?;
    info!("网络服务已启动");
    
    // 创建网络连接
    let conn_id = net_guard.create_connection(
        yaya_safe_services::mock_services::ConnectionType::TCP,
        "example.com",
        80
    )?;
    info!("创建网络连接成功: ID={}", conn_id);
    
    // 发送数据
    let send_data = b"GET / HTTP/1.1\r\nHost: example.com\r\n\r\n";
    let sent_size = net_guard.send_data(conn_id, send_data)?;
    info!("发送数据成功: 连接ID={}, 大小={}", conn_id, sent_size);
    
    // 接收数据
    let received_data = net_guard.receive_data(conn_id, 1024)?;
    info!("接收数据成功: 连接ID={}, 大小={}", conn_id, received_data.len());
    
    // 关闭连接
    net_guard.close_connection(conn_id)?;
    info!("关闭网络连接成功: ID={}", conn_id);
    
    // 停止网络服务
    net_guard.stop()?;
    info!("网络服务已停止");
    
    drop(net_guard);
    
    // 演示图形服务
    let graphics_service = service_manager.get_graphics_service();
    let mut gfx_guard = graphics_service.lock().map_err(|e| format!("无法锁定图形服务: {}", e))?;
    
    // 创建窗口
    let window_config = yaya_safe_services::WindowConfig {
        title: "Yaya Demo Window".to_string(),
        width: 800,
        height: 600,
        resizable: true,
        fullscreen: false,
    };
    
    let window_id = gfx_guard.create_window(window_config)?;
    info!("创建窗口成功: ID={}", window_id);
    
    // 清屏
    gfx_guard.clear_screen(window_id, 255, 255, 255, 255)?;
    info!("清屏操作完成");
    
    // 关闭窗口
    gfx_guard.close_window(window_id)?;
    info!("关闭窗口成功: ID={}", window_id);
    
    drop(gfx_guard);
    
    info!("服务演示完成");
    Ok(())
}